from flask import request, jsonify
from aps import app
import time
from aps.models.usuario import *
from aps.models.item import *
from aps.models.proyectofase import *
from aps.models.historialsolicitud import *
from aps.models.solicitud import *
from aps.models.solicituditem import *
from aps.models.proyectousuariorol import *

@app.route('/consultar_historial_solicitud', methods=['GET', 'POST'])
def consultar_historial_solicitud():
    """
    Nos permite traer las entradas en el historial para un item, fase o proyecto
    los itemes que cumplen con la condicion del filtro.
    @param request: objeto que encapsula la peticion del cliente
    @return: si la accion se realizo correctamente
    """
    id_proyecto = request.args['idproyecto']
    id_fase     = request.args['idfase']
    id_item     = request.args['iditem']
    # Especificamos una sentencia para obtener los registros
    sentencia   = 'SELECT * from historial WHERE {0}={1} order by fecha DESC, hora DESC'
    if int(id_proyecto)+int(id_fase)+int(id_item) == int(id_proyecto):
        sentencia = sentencia.format('idproyecto',id_proyecto)
    elif int(id_proyecto)+int(id_fase)+int(id_item) == int(id_fase):
        sentencia = sentencia.format('idfase',id_fase)
    else:
        sentencia = sentencia.format('iditem',id_item)
    # Obtenemos los registros de historial
    entradas = bdsession.query(Historial).from_statement(sentencia).all()
    data = []
    for entrada in entradas:
        item = {}
        item['idproyecto'] = entrada.idproyecto
        item['proyecto']   = entrada.proyecto.nombre
        item['idfase']     = entrada.idfase
        item['fase']       = entrada.fase.nombre
        item['iditem']     = entrada.iditem
        item['item']       = entrada.item.nombre
        item['fecha']      = str(entrada.fecha)
        item['hora']       = str(entrada.hora)
        item['idusuario']  = entrada.idusuario
        item['nombre']     = entrada.usuario.nombres
        item['apellido']   = entrada.usuario.apellidos
        item['mensaje']    = entrada.mensaje
        data.append(item)
    
    return jsonify ({'success':True, 'data':data, 'total':len(data)})
    
def log_it_solicitud(idsolicitud,user_nick,mensaje='mensaje por defecto', data = 0):
    """
    Nos permite crear una entrada en el historial solicitud
    @param idsolicitud: id de solicitud.
    @param user_nick: nick del usuario autenticado.
    @param mensaje: mensaje del registro.
    @return: None
    """
    solicitud = bdsession.query(Solicitud).filter_by(id=idsolicitud).first()
    usuario   = bdsession.query(Usuario).filter_by(nick=user_nick).first()
    proyecto  = bdsession.query(ProyectoFase).filter_by(idfase=solicitud.idfase).first().proyecto
    t         = time.localtime()
    fecha     = str(t.tm_year) + '-' + str(t.tm_mon).zfill(2) + '-' + str(t.tm_mday).zfill(2)
    hora      = str(t.tm_hour).zfill(2) + ':' + str(t.tm_min).zfill(2) + ':' + str(t.tm_sec).zfill(2)
    solitem   = bdsession.query(SolicitudItem).filter_by(idsolicitud=idsolicitud).all()
    sitem     = bdsession.query(SolicitudItem).filter_by(idsolicitud=idsolicitud).first()
    item2      = bdsession.query(Item).filter_by(id=sitem.iditem).first()
    proyusurol= bdsession.query(ProyectoUsuarioRol).filter_by(idproyecto=proyecto.id,idusuario=usuario.id,idrol = 2).first()
    listitem = ''
    for item in solitem:
        listitem = listitem + ' - ' + str(item.iditem)
    if solicitud.idusuario == usuario.id and data == 1:
        mensaje = '(CREADOR SOLICITUD) ' + mensaje
    if proyusurol is not None and data == 1:
        mensaje = '(LIDER DE PROYECTO) ' + mensaje
    # Creamos el registro y almacenamos en la BD
    model    = HistorialSolicitud(proyecto.id,idsolicitud,solicitud.idfase,usuario.id,listitem,fecha,hora,mensaje,item2.idlineabase)
    bdsession.add(model)
